// 组装模块并导出store的地方
import Vue from 'vue'
import Vuex from 'vuex'
import http from '@/common/luchApi/api.js'
Vue.use(Vuex)

// 导入模块
import user from './modules/user'
import im from './modules/im'

import {
	USER_INFO,
	USER_ID,
	IS_LOGIN,
	USER_TOKEN,
	LOCALTION_CITY,
	LOCALTION_REGION,
	VIDEO_PERMISSIONS
} from '@/store/mutations.js'

const store = new Vuex.Store({
	// 注册模块
	modules: {
		user,
		im
	},
	state: {
		// 原有的状态保持不变
		userInfo: {
			// avatar: null
			nickname: '登录/注册',
		},
		userId: null,
		userToken: null,
		// isLogin: false,
		cityName: '郑州', // 默认地址郑州
		regionName: null,
		loadMoreText:'加载中...',
		platform: '' ,// ios   android  小程序
		videoPermissions: '', // 是否可以播放视频点播
		withdrawData: '', // 钱包数据
		isShwoRedPacket: false ,// 是否显示红包数据
		isLoginShow: false // 控制只有登录后才重新调取首页领取红包接口
	},
	mutations: {
		[LOCALTION_CITY](state, city_name) {
			state.cityName = city_name
		},
		[USER_INFO](state, user_info) {
			// state.userInfo = user_info
			if(user_info) {
				state.userInfo = user_info
			} else {
				state.userInfo = {
					nickname: '登录/注册',
					avatar:'http://47.92.70.20:39013/youxuegou/static/image/uplodImg/no_login.png'
				}
			}
		},
		[USER_ID](state, user_id) {
			state.userId = user_id
		},
		[USER_TOKEN](state, user_token) {
			state.userToken = user_token
		},
		// [IS_LOGIN](state, is_login) {
		// 	state.isLogin = is_login
		// },
		[VIDEO_PERMISSIONS](state, videoPermissions){
			state.videoPermissions = videoPermissions
		},
		loadMoreText(state, text) {
			state.loadMoreText = text;
		},
		editUserInfo(state, info) {
			// 创建一个新的对象，将info,state.userInfo对象复制到新对象中 重新修改userinfo
			let data = Object.assign({}, state.userInfo, info);
			state.userInfo = data;
		},
		withdrawData(state, info) {
			state.withdrawData = info
		},
		isShowRedPacket(state, info) {
			state.isShwoRedPacket = info
		},
		isLoginShow(state, info) {
			state.isLoginShow = info
		},
		clearStoreState(state) {
			state.userInfo = {
				nickname: '登录/注册',
				avatar:'http://47.92.70.20:39013/youxuegou/static/image/uplodImg/no_login.png'
			}
			state.userId = null;
			// state.isLogin = false;
			state.userToken = null;
			state.num = 0;
		}
	},
	// 有时候我们需要从 store 中的 state 中派生出一些状态，例如对列表进行过滤等；我们可以在 store 中定义“getter”（可以认为是 store 的计算属性）。就像计算属性一样，getter 的返回值会根据它的依赖被缓存起来，且只有当它的依赖值发生了改变才会被重新计算。例如：
	getters: {
		
		// 是否登录
		isLogin: state => (state.userToken && state.userInfo && state.userInfo.id) ? true : false,
		// 是否设置支付密码
		isSetPayPwd: state => {
			return (state.userInfo && state.userInfo.paypwdFlag == 1 ) ? true : false;
		}
	},
	actions: {
		// 获取用户信息
		async queryUserInfo({
			commit,
			state
		}) {
			const {
				code,
				data
			} = await http.queryUserInfo()
			if (code === 1) {
				commit(USER_INFO, data)
			} else if (code == 2) {
				commit(USER_TOKEN, null)
			} else {
				
			}
		},
		/**
		 * 全局检测是否需要登录 by:wyh 2020/06/10
			参数 fn 如果成功登录的回调
		 */
		async checkLogin({ commit, state }, fn) {
			let vuexToken = state.userToken
			//如果没有token 未登录 如果有token 判断token是否有效
			if (vuexToken) {
				//如果有token 发送请求获取个人信息 重新刷新绑定
				const {code, data} = await http.queryUserInfo()
				
				if (code === 1) { //如果用户登录有效
					commit(USER_INFO, data)
					commit("IS_LOGIN", true)
					 //如果用户登录有效 调用回调方法
					 fn();
				}
				else { //如果用户登录失效
					// 如果未登录
					uni.showModal({
						content: "登录体验更佳哦",
						confirmText: "登录",
						cancelText: "再看看",
						success: (res) => {
							if (res.confirm) {
								uni.navigateTo({
									url: "/pages/tabBar/login/author/author"
								})
							} else if (res.cancel) {
								//console.log('用户点击取消');
							}
						}
					})
				}
				
			} else {
				// 如果未登录
				uni.showModal({
					content: "登录体验更佳哦",
					confirmText: "登录",
					cancelText: "再看看",
					success: (res) => {
						if (res.confirm) {
							uni.navigateTo({
								url: "/pages/tabBar/login/author/author"
							})
						} else if (res.cancel) {
							//console.log('用户点击取消');
						}
					}
				})
			}
		}
	}
})

export default store
